package 多线程;

import java.util.concurrent.locks.LockSupport;

/**
 * 该类用于实现数字和字母的交替打印。
 * 使用LockSupport实现线程间的同步，确保按顺序打印。
 * 时间复杂度：O(n)，空间复杂度：O(1)
 */
public class NumAndLetterUsingLockSupport {
    private static Thread numThread, letterThread; // 定义数字线程和字母线程

    /**
     * 主方法，启动两个线程分别打印数字和字母。
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        letterThread = new Thread(() -> {
            for(int i = 0; i < 26; i++) {
                LockSupport.park(); // 阻塞当前线程
                System.out.println((char) ('a' + i)); // 打印字母
                LockSupport.unpark(numThread); // 唤醒数字线程
            }
        }, "letterThread"); // 字母线程
        numThread = new Thread(() -> {
            for(int i = 1; i <= 26; i++) {
                System.out.println(i); // 打印数字
                LockSupport.unpark(letterThread); // 唤醒字母线程
                LockSupport.park(); // 阻塞当前线程
            }
        }, "numThread"); // 数字线程
        numThread.start(); // 启动数字线程
        letterThread.start(); // 启动字母线程
    }
}
